#魔术方法/属性
#__xx__() 这种样子的方法就叫魔法方法(魔术方法)
#__doc__ 类/函数的描述属性 可以打印出类中的三引号注释内容
class A(object):
    """这是一个空的测试类"""
    def __str__(self):
        return "我是A"
    def __call__(self):
        print("调用了A的可调用方法")
print(A.__doc__)
#__module__ 当前对象所在的模块
#__class__ 当前对象所在的类
a1 = A()
print(a1.__module__)
print(a1.__class__)
#__str__() 对象描述信息 当类中定义这个方法时,打印对象,自动输入这个方法返回的字符串,这个方法的返回必须为字符串
print(a1)
#__call__() 使一个实例对象变成一个可调用方法 能加()的就是可调用方法 如函数,内置函数,类
#当实例对象加括号时,就相当于调用了这个方法 callable() 判断一个对象是否是可调用方法
print(callable(a1))
a1()
#__dict__ 返回对象具有的属性和方法